﻿using DotNetDetour.DetourWays;
using System;
using System.Reflection;

namespace DotNetDetour
{
    public interface IDetour
    {
        HookInfo Patch(IntPtr rawMethod/*要hook的目标函数*/,
            IntPtr hookMethod/*用户定义的函数，可以调用原始占位函数来实现对原函数的调用*/,
            IntPtr originalMethod/*原始占位函数*/);

        /// <summary>
        ///
        /// </summary>
        /// <param name="rawMethod">要hook的目标函数</param>
        /// <param name="hookMethod">用户定义的函数，可以调用原始占位函数来实现对原函数的调用</param>
        /// <param name="originalMethod">原始占位函数</param>
        HookInfo Patch(MethodBase rawMethod/*要hook的目标函数*/,
                MethodBase hookMethod/*用户定义的函数，可以调用原始占位函数来实现对原函数的调用*/,
                MethodBase originalMethod/*原始占位函数*/);

        /// <summary>
        /// 解除Hook
        /// </summary>
        void Unpatch();

        void Unpatch(HookInfo apiInfo);
    }
}